/*
  axios请求封装
 */
import { Message, Notification } from 'element-ui'

// import https from 'https';
// export default ({ $axios, app }) => {
export default ({ $axios, app, redirect, req }) => {
  // let $axios = context.$axios, app = context.app;
  // request拦截器
  $axios.interceptors.request.use(
    config => {
      // 设置请求接口地址
      config.baseURL = process.env.BASE_URL
      if (process.server) {
        // 如果是服务端发起的请求，获取客户端请求ip地址
        // console.log('ip', require('request-ip').getClientIp(context.req))
        config.headers["Proxy-Client-IP"] = require('request-ip').getClientIp(req)
      }
      let token = app.$cookies.get("token")
      if (token) {
        // 将token信息添加到请求头中
        config.headers["token"] = token
      }
      return config;
    },
    error => {
      Message({
        message: '网络异常，请求失败',
        type: 'error',
        offset: 100,
        duration: 3000
      })
      return Promise.reject(error);
    }
  );
  // response拦截器
  $axios.interceptors.response.use(
    response => {
      // console.log("查询返回结果: ", response.data)
      /*
        返回结果为文件流的话
       */
      if (response.headers['content-type'].indexOf('application/json') === -1) {
        /*
          后台返回文件流，进行封装操作
          注意：此步操作的目的是为了拿到接口返回的文件名
         */
        let fileName = response.headers['content-disposition'].substring(20)
        return {
          code: 200,
          msg: '请求成功',
          data: {
            // 文件名
            fileName: fileName,
            // 文件数据
            data: response.data
          }
        }
      }
      /*if (response.data instanceof Blob) {

        return response;
      }*/
      if (!!response.data.loginSuccess) {
        /*
          如果返回结果中携带了用户令牌信息
         */
        // 存储token信息到Cookie中，Cookie存储token过期时间为30分钟
        let loginSuccess = response.data.loginSuccess
        // 获取令牌过期时间
        let expireTime = loginSuccess.expireTime / 1000
        app.$cookies.set("userId", loginSuccess.userId, { path: '/', maxAge: expireTime })
        app.$cookies.set("username", loginSuccess.username, { path: '/', maxAge: expireTime })
        app.$cookies.set("avatar", loginSuccess.avatar, { path: '/', maxAge: expireTime })
        app.$cookies.set("token", loginSuccess.token, { path: '/', maxAge: expireTime })
      }
      if (response.data.code && response.data.code !== 200) {
        Notification({
          title: '温馨提示',
          type: 'warning',
          message: response.data.msg,
          offset: 100,
          duration: 2000
        })
        // 没有操作权限
        if (response.data.code === 401) {
          // 重定向到401页面
          redirect('/error/401');
          // app.router.push('/error/401')
        }
        // 用户令牌有误
        if (response.data.code === 40301 || response.data.code === 40302) {
          app.$cookies.remove("userId")
          app.$cookies.remove("username")
          app.$cookies.remove("avatar")
          app.$cookies.remove("token")
          app.store.commit('user/setUserId', '')
          app.store.commit('user/setUsername', '')
          app.store.commit('user/setAvatar', '')
          // app.store.commit('user/setAvatar', 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif?imageView2/1/w/80/h/80')
          app.store.commit('user/setStatus', false)
          // 回到首页面
          redirect('/')
          // app.router.push({ path: '/'})
        }
        // 用户被禁用
        if (response.data.code === 40303) {
          // 直接跳转到用户申诉页面
          redirect({ name: 'appeal', params: response.data })
          // app.router.push({ name: 'appeal', params: response.data })
        }
        // 接口返回业务处理异常结果
        return Promise.reject(response.data)
      }

      // 返回成功数据
      return response;
    },
    error => {
      // console.log("返回的报错信息")
      Message({
        message: error || 'error',
        type: 'error',
        offset: 100,
        duration: 3000
      })
      return Promise.reject(error)
    }
  );
};



